.PHONY:all prepare build clean distclean

##########################################################################################
#common
###########################################################################################
OSDRV_CROSS:=aarch64-himix210-linux-
CHIP:=hi3531dv200

##########################################################################################
#cmd settings
###########################################################################################
export CP:=cp -ravf
export MKDIR:=mkdir -p
export RM:=rm -rf 
export ECHO:=echo -e 
#[Shell 中的颜色](https://blog.csdn.net/e5pool/article/details/126804442)
export RED_COLOR:=\033[31m
export GREEN_COLOR:=\033[32m
export RESET_COLOR:=\033[0m

###########################################################################################
#path settings
###########################################################################################
CUR_PATH:=$(shell pwd)
COMOM_PATH:=$(CUR_PATH)/common
AUDIO_ADP_PATH:=$(CUR_PATH)/audio/adp
MPP_PATH:=$(CUR_PATH)/mpp
EXTDRV_PATH:=$(MPP_PATH)/extdrv
MPP_INC_PATH:=$(MPP_PATH)/include
MPP_LIB_PATH:=$(MPP_PATH)/lib
SRC_PATH:=$(CUR_PATH)/src
TARGET_PATH:=$(CUR_PATH)/bin

#####################################################################################
#common options
#####################################################################################
COMMON_FLAGS:=-I$(COMOM_PATH)
COMMON_FLAGS+=-I$(SRC_PATH)
COMMON_FLAGS+=-I$(MPP_INC_PATH)
COMMON_FLAGS+=-I$(AUDIO_ADP_PATH)
COMMON_FLAGS+=-I$(EXTDRV_PATH)/nvp6324
COMMON_FLAGS+=-I$(EXTDRV_PATH)/nvp6158
COMMON_FLAGS+=-I$(EXTDRV_PATH)/tp2854b
COMMON_FLAGS+=-I$(EXTDRV_PATH)/tp2856
COMMON_FLAGS+=-I$(EXTDRV_PATH)/es8388
COMMON_FLAGS+=-I$(EXTDRV_PATH)/lt8618sx
COMMON_FLAGS+=-I$(EXTDRV_PATH)/tlv320aic31
COMMON_FLAGS+=-g -O2 -mcpu=cortex-a53 -fPIC -MMD
COMMON_FLAGS+=-ftree-vectorize -fopenmp

#####################################################################################
#C options
#####################################################################################
CC:=$(OSDRV_CROSS)gcc

CFLAGS+=-D$(CHIP) -DHI_XXXX -DISP_V2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DHI_RELEASE
CFLAGS+=-DVER_X=1 -DVER_Y=0 -DVER_Z=0 -DVER_P=0 -DVER_B=10 -DUSER_BIT_64 -DKERNEL_BIT_64
CFLAGS+=-DHI_ACODEC_TYPE_ES8388 -DHI_ACODEC_TYPE_HDMI -DHI_VQE_USE_STATIC_MODULE_REGISTER -DHI_AAC_USE_STATIC_MODULE_REGISTER -DHI_AAC_HAVE_SBR_LIB
CFLAGS+=-Wall -Wno-error=implicit-function-declaration -Wno-date-time
CFLAGS+=-fstack-protector-strong -fno-aggressive-loop-optimizations -ffunction-sections -fdata-sections 
CFLAGS+=$(COMMON_FLAGS)

#####################################################################################
#CXX options
#####################################################################################
CXX:=$(OSDRV_CROSS)g++
CXXFLAGS+=$(COMMON_FLAGS)
CXXFLAGS+=-fpermissive

########################################################################################
#linker options
########################################################################################
MPP_LIBS:=-lmpi
MPP_LIBS+=-lhdmi 
MPP_LIBS+=-lVoiceEngine
MPP_LIBS+=-lupvqe
MPP_LIBS+=-ldnvqe
MPP_LIBS+=-laaccomm
MPP_LIBS+=-laacenc
MPP_LIBS+=-laacdec
MPP_LIBS+=-laacsbrenc
MPP_LIBS+=-laacsbrdec
MPP_LIBS+=-lhive_RES
MPP_LIBS+=-lhive_record
MPP_LIBS+=-lhive_HPF
MPP_LIBS+=-lhive_ANR
MPP_LIBS+=-lhive_AEC
MPP_LIBS+=-lhive_AGC
MPP_LIBS+=-lhive_EQ
#MPP_LIBS+=-lhive_common
MPP_LIBS+=-laacdec
MPP_LIBS+=-laacenc
MPP_LIBS+=-laaccomm
MPP_LIBS+=-laacsbrdec
MPP_LIBS+=-laacsbrenc
MPP_LIBS+=-lsecurec

LDFLAGS+=-L$(MPP_LIB_PATH)
LDFLAGS+=$(MPP_LIBS) 

LDFLAGS+=-lpthread -lm -ldl -lstdc++ -lrt
LDFLAGS+=-Wl,--start-group $(APP_LIBS) -Wl,--end-group 
LDFLAGS+=-fopenmp
########################################################################
#targets settings
########################################################################
SRCS :=$(wildcard $(COMOM_PATH)/*.c)
SRCS+=$(wildcard $(SRC_PATH)/*.c)
CPP_SRCS :=$(wildcard $(SRC_PATH)/*.cpp)

OBJS := $(SRCS:%.c=%.o)
OBJS += $(CPP_SRCS:%.cpp=%.o)

SRC_PATHS:=$(sort $(dir $(OBJS)))
CLEAN_OBJS:=$(addsuffix *.o, $(SRC_PATHS))
CLEAN_DEPS:=$(addsuffix *.d, $(SRC_PATHS))

###########################################################################################
#target
###########################################################################################
TARGET:=$(TARGET_PATH)/test_vdec

########################################################################
#compile
########################################################################
all:prepare build

prepare:
	-@$(MKDIR) $(TARGET_PATH)

build:$(OBJS)
	$(CXX) -o $(TARGET) $(OBJS) $(LDFLAGS)

clean:
	-@$(RM) $(CLEAN_OBJS)
	-@$(RM) $(CLEAN_DEPS)
	-@$(RM) $(TARGET)

distclean:clean
	-@$(RM) $(TARGET_PATH)

########################################################################
#rules
########################################################################
%.o:%.c
	@$(ECHO) "$(GREEN_COLOR)$(CC) $< compiling ...$(RESET_COLOR)"
	$(CC) $(CFLAGS) -c $< -o $@
	
%.o:%.cpp
	@$(ECHO) "$(GREEN_COLOR)$(CXX) $< compiling ...$(RESET_COLOR)"
	$(CXX) $(CXXFLAGS) -c $< -o $@

-include $(OBJS:.o=.d)
